﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Kaskelot.Services.Model;

namespace Stockholm.SOA.Kaskelot.WCF.ServiceImplementation.Mapping
{
	public static class ValdistriktExtensions
	{
		public static DataContracts.Valdistrikt ToContract(this Valdistrikt entity)
		{
			DataContracts.Valdistrikt b = new DataContracts.Valdistrikt();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static DataContracts.Valdistrikt ToMinimalContract(this Valdistrikt entity)
		{
			DataContracts.Valdistrikt b = new DataContracts.Valdistrikt();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static Valdistrikt ToEntity(this DataContracts.Valdistrikt b)
		{
			Valdistrikt entity = new Valdistrikt();

			CopyToEntity(b, entity);

			return entity;
		}

		public static void UpdateEntity(this Valdistrikt entity, DataContracts.Valdistrikt valdistrikt)
		{
			CopyToEntity(valdistrikt, entity);
		}

		private static void CopyFromEntity(Valdistrikt from, DataContracts.Valdistrikt to, bool minimal)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;
			to.Namn = from.Forsamling != null ? from.Forsamling.Benamning + " " + from.ValdistriktNr : "";
			to.ForsamlingId = from.ForsamlingId;
			to.ForsamlingNamn = from.Forsamling != null ? from.Forsamling.Benamning : String.Empty;
			to.ValkretsNamn = from.Forsamling != null ? from.Forsamling.Valkrets.Benamning : String.Empty;

			to.Andrad = from.Andrad;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad;
			to.SkapadAv = from.SkapadAv;

			to.BemanningKlar = from.BemanningKlar;
			to.ValdistriktNr = from.ValdistriktNr;

			if (minimal) return;
			to.Forsamling = from.Forsamling.ToMinimalContract();
		}

		private static void CopyToEntity(DataContracts.Valdistrikt from, Valdistrikt to)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;

			to.Andrad = from.Andrad;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad;
			to.SkapadAv = from.SkapadAv;

			to.BemanningKlar = from.BemanningKlar;
			to.ValdistriktNr = from.ValdistriktNr;
			
			to.ForsamlingId = from.ForsamlingId;
		}
	}
}
